#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,rk[N],sa[N],tp[N],ct[N]; char a[N];
void qsort(){
	for(int i=1;i<=m;i++) ct[i]=0;
	for(int i=1;i<=n;i++) ct[rk[i]]++;
	for(int i=1;i<=m;i++) ct[i]+=ct[i-1];
	for(int i=n;i;i--) sa[ct[rk[tp[i]]]--]=tp[i];
}
int main()
{
	srand(time(0));
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	scanf("%s",a+1); n=strlen(a+1); m=200;
	for(int i=1;i<=n;i++) tp[i]=i,rk[i]=a[i];
	qsort();
	for(int k=1,t=0;t<n;k<<=1,m=t){
		t=0;
		for(int i=n-k+1;i<=n;i++) tp[++t]=i;
		for(int i=1;i<=n;i++) if(sa[i]>k) tp[++t]=sa[i]-k;
		qsort();
		memcpy(tp,rk,sizeof(tp));
		rk[sa[1]]=t=1;
		for(int i=2;i<=n;i++){
			if(tp[sa[i]]==tp[sa[i-1]] && tp[sa[i]+k]==tp[sa[i-1]+k]) rk[sa[i]]=t;
			else rk[sa[i]]=++t;
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",sa[i]);
	return 0;
}
